<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			//JS函数:function
			//重复执行相同的代码
			//f(x) = 2x+3 ,x=3,f(x)=9
			
			//函数关键字定义函数(命名函数)
			function setName(a,b){//声明函数“setName”，(a,b)为形参（形式参数）
				//函数体
				return a+b+1;//返回值(调用时给出的结果)
			}
			console.log(setName(1,2));//调用（1+2+1=4）,(1,2)为实参（实际参数）
			
			//函数规范
			//函数名使用动词，变量使用名词
			//小驼峰式命名
			
			//getSum函数：封装sum
			function getSum(a,b){
				var sum = 0;
				for (a;a<=b;a++){
					sum += a;
				}
				console.log(sum);//不使用返回值
				// return sum;//返回值
			}
			// console.log(getSum(1,100));
			getSum(1,100);//5050
			getSum(2,50);//1274
			
			//重复调用
			function cook(){
				console.log("宫保鸡丁");
			}
			var i = 0;
			while(i<3){
				cook();//循环体
				i++;
			}
			
			//实现不同的效果
			function toPrint(a){
				document.write("a");
			}
			toPrint(123);
			toPrint(456);
			//不定长参数arguments：存储所有传递参数
			function f(a,b,c,...rest){
				console.log(rest);
			}
			f(1,3,4,5,6);//输出[5,6]
			function f(...rest){
				console.log(rest);
			}
			f(1,3,4,5,6);//输出[1,3,4,5,6]
			
			function fn(){//arguments
				console.log(arguments);
			}
			fn(1);//无形参，但实参赋了一个值，返回伪数组
			fn(1,2);//返回伪数组
			fn(1,2,3);//返回伪数组
			
			//空形参
			function nTest(){
				return 1+2;
			}
			console.log(nTest());//3
			
			//return返回值
			function cook2(aru){
				console.log(aru);//输出函数被放入函数内部，不合适
			}
			cook2("大肘子");
			//建议更改为
			function cook3(aru){
				return aru;//改为return
			}
			console.log(cook3("大肘子"));
			
			//练习:利用函数判断是否是闰年
			//闰年:能被4整除，但不能被100整除，或能被400整除
			function isRunYear(year){
				if((year%4 == 0 && year % 100 != 0) || year % 400 == 0){
					return "这一年是闰年";
				}else{
					return "这一年是平年";//函数内可以有多个return
				}
			}
			console.log(isRunYear(2022));//调用
			//练习:利用函数求1-100奇数的和
			function getSum2(){
				var sum = 0;
				for (var i = 1;i <= 100;i++) {
					if (i % 2 != 0) {
						sum += i;
					} 
				}
				return sum;
			}
			console.log(getSum2());//这里只需要求1-100，所以传空参就行
			
			//声明函数：函数表达式(匿名函数)
			//函数表达式存放的是函数，变量存放函数值
			//格式：function (){}
			var fun = function(){//函数名:fun
				//函数体
				console.log("我是函数表达式");
			}
			fun();//调用
			console.log(fun);
			
			var fun = function(aru){
				console.log(aru);
			}
			fun("输出测试");
			console.log(fun);
			//函数作用域:判断全局变量与局部变量，全局作用域与局部作用域
			//全局作用域:Script标签或外链js文件下的为全局作用域
			//局部作用域:在函数内部的为局部作用域
			
			var num = 10;//全局变量，在script标签下声明
			
			function fn(){
				var num = 20;//局部变量，在函数内部声明
				console.log(num);
			}
			fn();
			
			//如果是在函数内部没有声明（没有使用var），直接赋值也属于全局变量
			function fn3(){
				var num1 = 10;
				num2 = 20;//没有使用var
			}
			fn3();//需要调用函数后，138-139才会被执行，否则输出num2仍然会报错
			// console.log(num1);//报错：局部变量只能在函数内部起作用
			console.log(num2);//有返回值20，是全局变量
			
		</script>
	</body>
</html>